#ifndef _HASHTABLECLOSEHASH_H
#define _HASHTABLECLOSEHASH_H

#define HTSIZE	100

// 适应更多的类型
typedef int KeyType;
typedef int ValueType;
typedef int (*HashFunc)(KeyType key);

typedef enum htstate
{
	Empety, //空有效无值
	Valid,  //非空有效有值
	Invalid //非空无效
}HTSTATE;
/*
* 不同与栈、队列，这2个的元素是int类型或者char，哈希表的元素最起码包括键值对
*/
typedef struct htElem
{
	KeyType key; //键值对
	ValueType value;
	HTSTATE htState; //状态
}HTELEM;

/*
* 存放元素的空间
* 哈希表当前有效长度
* 哈希函数：取余
*/
typedef struct hashtable
{
	HTELEM* htPointer;
	int len;
	HashFunc HashFunc;
}HASHTABLE;


int HashFunction(KeyType key);
void InitHt(HASHTABLE* ht,HTELEM* htPointer);
int FindElemInHt(HASHTABLE* ht,KeyType key,ValueType* value);
int IndexElemInHt(HASHTABLE* ht,KeyType key,int* index);
int DelElemFromHt(HASHTABLE* ht,KeyType key);
int IsHtEmpety(HASHTABLE* ht);




#endif